# cmake最低版本要求
cmake_minimum_required(VERSION 3.7)

# 设置工程的名字，生成的可执行文件也将使用该名称，本例使用net.exe
project(net)

# 设置C语言的规范为C99
set(CMAKE_C_STANDARD 99)
set(CMAKE_CXX_FLAGS="/utf-8")
add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>")
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")

# 调用napcap中的静态库使用
LINK_DIRECTORIES(
    ${PROJECT_SOURCE_DIR}/npcap/Lib/x64 # win64使用

    # ${PROJECT_SOURCE_DIR}/lib/npcap/Lib/   # win32使用
)

# 给visual studio编译器使用的宏，Enable GCC Debug
add_definitions(-D_CRT_SECURE_NO_WARNINGS)

# 所有头文件的搜索路径，使程序中可以直接调用字节的库文件
include_directories(
    ${PROJECT_SOURCE_DIR}
    ${PROJECT_SOURCE_DIR}/src
    ${PROJECT_SOURCE_DIR}/src/net/basic
    ${PROJECT_SOURCE_DIR}/src/net/net
    ${PROJECT_SOURCE_DIR}/npcap/Include # pcap路径
    ${PROJECT_SOURCE_DIR}/src/net/net/inc
    ${PROJECT_SOURCE_DIR}/src/net/net/src
    ${PROJECT_SOURCE_DIR}/src/plat
    ${PROJECT_SOURCE_DIR}/src/app
    ${PROJECT_SOURCE_DIR}/src/app/echo
    ${PROJECT_SOURCE_DIR}/src/app/test
    ${PROJECT_SOURCE_DIR}/src/app/ping
)

# 搜索src文件夹下面的所有源文件，生成文件列表
file(GLOB_RECURSE SOURCE_LIST "src/*.c" "src/*.h")

# 将源文件列表加入到工程中
add_executable(${PROJECT_NAME} ${SOURCE_LIST})

# 与一些库进行编译链接，生成最终的程序
# 针对网络的平台配置
add_definitions(-DNET_DRIVER_PCAP) # use pcap

message(STATUS "current platform: ${CMAKE_HOST_SYSTEM_NAME}")

# 根据当前的平台来选择不同的编译环境
if(CMAKE_HOST_SYSTEM_NAME MATCHES "Windows")
    add_definitions(-DSYS_PLAT_WINDOWS)
    target_link_libraries(${PROJECT_NAME} wpcap packet Ws2_32) # 链接windows自带的32位网络库
else()
    # Linux和Mac上的特定配置
    add_definitions(-DSYS_PLAT_LINUX)
    target_link_libraries(${PROJECT_NAME} pthread pcap)
endif()
